home *** CD-ROM | disk | FTP | other *** search
/ Macintosh Technology Seed 1996 September / Macintosh Technology Seed (September 1996) (CDRM1437020).ISO / pc / qd3d15d6 / 15d6_sdk.exe / QD3D Win32 1.5d6 / Interfaces / RAVE.H < prev   
C/C++ Source or Header  |  1996-08-21  |  43KB  |  1,051 lines

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        RAVE.h                                                     **
  4.  **                                                                          **
  5.  **     Purpose:     Header file for RAVE API                                 **
  6.  **                                                                          **
  7.  **     Author:        Mike W. Kelley                                             **
  8.  **                    Brent H. Pease                                             **
  9.  **                                                                          **
  10.  **     Copyright (C) 1994-96 Apple Computer, Inc.  All rights reserved.     **
  11.  **        OpenGL™ is a trademark of Silicon Graphics, Inc.                     **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14.  
  15. #ifndef _RAVE_h
  16. #define _RAVE_h
  17.  
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21.  
  22. /******************************************************************************
  23.  *
  24.  * Platform macros.
  25.  * This sets kQAPlatform to one of kQAMacOS, kQAWin32, or kQAGeneric.
  26.  * kQAPlatform controls platform-specific compilation switches and types.
  27.  *
  28.  *****************************************************************************/
  29.  
  30. #if !defined(kQAMacOS)
  31. #define    kQAMacOS        1            /* Target is MacOS                    */
  32. #endif
  33.  
  34. #if !defined(kQAGeneric)
  35. #define kQAGeneric        2            /* Target is generic platform        */
  36. #endif
  37.  
  38. #if !defined(kQAWin32)
  39. #define kQAWin32        3            /* Target is Win32                    */
  40. #endif
  41.  
  42. #if defined(_WIN32) || defined(_WINDOWS)
  43.     #define kQAPlatform kQAWin32
  44. #elif !defined(kQAPlatform)
  45.     #define kQAPlatform kQAMacOS
  46. #endif
  47.  
  48. /******************************************************************************
  49.  *
  50.  * Export Control
  51.  *
  52.  *****************************************************************************/
  53.  
  54. #if defined(_MSC_VER)    /* Microsoft Visual C */
  55.     #if defined(WIN32_RAVEEXPORTING)    /* define when building DLL */
  56.         #define    RAVE_EXPORT        __declspec( dllexport )
  57.     #else
  58.         #define RAVE_EXPORT        __declspec( dllimport )
  59.     #endif /* WIN32_RAVEEXPORTING */
  60. #else
  61.     #define RAVE_EXPORT
  62. #endif /* _MSC_VER */
  63.  
  64. /******************************************************************************
  65.  *
  66.  * Platform dependent datatypes: TQAImagePixelType, TQADevice, TQAClip, and TQARect.
  67.  *
  68.  *****************************************************************************/
  69.  
  70. typedef enum TQAImagePixelType
  71. {
  72.     kQAPixel_Alpha1        = 0,        /* 1 bit/pixel alpha */
  73.     kQAPixel_RGB16        = 1,        /* 16 bit/pixel, R=14:10, G=9:5, B=4:0 */
  74.     kQAPixel_ARGB16        = 2,        /* 16 bit/pixel, A=15, R=14:10, G=9:5, B=4:0 */
  75.     kQAPixel_RGB32        = 3,        /* 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
  76.     kQAPixel_ARGB32        = 4,        /* 32 bit/pixel, A=31:24, R=23:16, G=15:8, B=7:0 */
  77.     kQAPixel_CL4        = 5,        /* 4 bit color look up table, always big endian,
  78.                                         ie high 4 bits effect left pixel */
  79.     kQAPixel_CL8        = 6            /* 8 bit color look up table */
  80. #if (kQAPlatform == kQAWin32)
  81.     ,
  82.     kQAPixel_RGB16_565    = 7,        /* 16 bits/pixel, no alpha, R:5, G:6, B:5 */
  83.     kQAPixel_RGB24        = 8            /* 24 bits/pixel, no alpha, R:8, G:8, B:8 */
  84. #endif /* kQAPlatform == kQAWin32 */
  85. } TQAImagePixelType;
  86.  
  87. typedef enum TQAColorTableType
  88. {
  89.     kQAColorTable_CL8_RGB32        = 0,        /* 256 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
  90.     kQAColorTable_CL4_RGB32        = 1            /* 16 entry, 32 bit/pixel, R=23:16, G=15:8, B=7:0 */
  91. } TQAColorTableType;
  92.  
  93. typedef enum TQADeviceType            /* Selects target device type */
  94. {
  95.     kQADeviceMemory        = 0,        /* Memory draw context */
  96.     kQADeviceGDevice    = 1,        /* Macintosh GDevice draw context */
  97.     kQADeviceWin32DC    = 2,        /* Win32 DC  */
  98.     kQADeviceDDSurface    = 3            /* Win32 DirectDraw Surface */
  99. } TQADeviceType;
  100.  
  101. typedef struct TQADeviceMemory        /* Generic memory pixmap device */
  102. {
  103.     long                rowBytes;    /* Rowbytes */
  104.     TQAImagePixelType    pixelType;    /* Depth, color space, etc. */
  105.     long                width;        /* Width in pixels */
  106.     long                height;        /* Height in pixels */
  107.     void                *baseAddr;    /* Base address of pixmap */
  108. } TQADeviceMemory;
  109.  
  110. typedef enum TQAClipType            /* Selects target clip type */
  111. {
  112.     kQAClipRgn            = 0,        /* Macintosh clipRgn with serial number */
  113.     kQAClipWin32Rgn        = 1            /* Win32 clip region */
  114. } TQAClipType;
  115.  
  116. typedef struct TQARect
  117. {
  118.     long                left;
  119.     long                right;
  120.     long                top;
  121.     long                bottom;
  122. } TQARect;
  123.  
  124. #if (kQAPlatform == kQAMacOS)
  125.     /*
  126.      * MacOS supports memory and GDevice. TQARect == Rect. TQAClip is a clipRgn.
  127.      */
  128.     
  129.     #include <Quickdraw.h>
  130.     #include <QDOffscreen.h>
  131.     
  132.     typedef union TQAPlatformDevice
  133.     {
  134.         TQADeviceMemory    memoryDevice;
  135.         GDHandle        gDevice;
  136.     } TQAPlatformDevice;
  137.     
  138.     typedef union TQAPlatformClip
  139.     {
  140.         RgnHandle        clipRgn;
  141.     } TQAPlatformClip;
  142.     
  143. #elif (kQAPlatform == kQAWin32)
  144.     /*
  145.      * Win32 platform. TQARect is generic. TQAPlatform is DC or Surface. TQAClip is HRGN.
  146.      */
  147.     #include <windows.h>
  148.     #include <ddraw.h>
  149.  
  150.     typedef union TQAPlatformDevice
  151.     {
  152.         TQADeviceMemory            memoryDevice;
  153.         HDC                        hdc;
  154.         struct
  155.         {
  156.             LPDIRECTDRAW            lpDirectDraw;
  157.             LPDIRECTDRAWSURFACE        lpDirectDrawSurface;
  158.         };
  159.     } TQAPlatformDevice;
  160.  
  161.     typedef union TQAPlatformClip
  162.     {
  163.         HRGN            clipRgn;
  164.     } TQAPlatformClip;
  165. #elif (kQAPlatform == kQAGeneric)
  166.     /*
  167.      * Generic platform supports memory device only. TQARect is generic. TQAClip is ???.
  168.      */
  169.     
  170.     typedef union TQAPlatformDevice
  171.     {
  172.         TQADeviceMemory    memoryDevice;
  173.     } TQAPlatformDevice;
  174.     
  175.     typedef union TQAPlatformClip
  176.     {
  177.         void            *region;            /* ??? */
  178.     } TQAPlatformClip;
  179. #else
  180.     ??? Unrecognized kQAPlatform
  181. #endif
  182.  
  183. typedef struct TQADevice
  184. {
  185.     TQADeviceType        deviceType;
  186.     TQAPlatformDevice    device;
  187. } TQADevice;
  188.  
  189. typedef struct TQAClip
  190. {
  191.     TQAClipType            clipType;
  192.     TQAPlatformClip        clip;
  193. } TQAClip;
  194.  
  195. /******************************************************************************
  196.  *
  197.  * Basic data types.
  198.  *
  199.  *****************************************************************************/
  200.  
  201. typedef struct    TQADrawContext TQADrawContext;    /* Drawing context for an engine */
  202. typedef struct    TQAEngine TQAEngine;            /* Pointer to a drawing engine */
  203. typedef struct    TQATexture TQATexture;            /* Pointer to an allocated texture map */
  204. typedef struct    TQABitmap TQABitmap;            /* Pointer to an allocated bitmap */
  205. typedef struct    TQADrawPrivate TQADrawPrivate;    /* Engine's private draw context pointer */
  206. typedef struct    TQAImage TQAImage;                /* An image for use as texture or bitmap */
  207. typedef struct    TQAColorTable TQAColorTable;
  208.  
  209. typedef struct TQAIndexedTriangle                /* A single triangle element for QADrawTriMesh */
  210. {
  211.     unsigned long    triangleFlags;                /* Triangle flags, see kQATriFlags_ */
  212.     unsigned long    vertices[3];                /* Indices into a vertex array */
  213. } TQAIndexedTriangle;
  214.  
  215. struct TQAImage                                    /* An image for use as texture or bitmap */
  216. {
  217.     long        width;                            /* Width of pixmap */
  218.     long        height;                            /* Height of pixmap */
  219.     long        rowBytes;                        /* Rowbytes of pixmap */
  220.     void        *pixmap;                        /* Pixmap */
  221. };
  222.  
  223. typedef enum TQAError                            /* Standard error type */
  224. {
  225.     kQANoErr                = 0,                /* No error */
  226.     kQAError                = 1,                /* Generic error flag */
  227.     kQAOutOfMemory            = 2,                /* Insufficient memory */
  228.     kQANotSupported            = 3,                /* Requested feature is not supported */
  229.     kQAOutOfDate            = 4,                /* A newer drawing engine was registered */
  230.     kQAParamErr                = 5,                /* Error in passed parameters */
  231.     kQAGestaltUnknown        = 6,                    /* Requested gestalt type isn't available */
  232.     kQADisplayModeUnsupported    = 7                /* Engine cannot render to the display in its current ,
  233.                                                  * mode, but could if it were in some other mode */
  234. } TQAError;
  235.  
  236. /************************************************************************************************
  237.  *
  238.  * Vertex data types.
  239.  *
  240.  ***********************************************************************************************/
  241.  
  242. /*
  243.  * TQAVGouraud is used for Gouraud shading. Each vertex specifies position, color and Z.
  244.  *
  245.  * Alpha is always treated as indicating transparency. Drawing engines which don't
  246.  * support Z-sorted rendering use the back-to-front transparency blending functions
  247.  * shown below. (ARGBsrc are the source (new) values, ARGBdest are  the destination
  248.  * (previous) pixel values.)
  249.  *
  250.  *        Premultiplied                            Interpolated
  251.  *
  252.  *        A = 1 - (1 - Asrc) * (1 - Adest)        A = 1 - (1 - Asrc) * (1 - Adest) 
  253.  *        R = (1 - Asrc) * Rdest + Rsrc            R = (1 - Asrc) * Rdest + Asrc * Rsrc
  254.  *        G = (1 - Asrc) * Gdest + Gsrc            G = (1 - Asrc) * Gdest + Asrc * Gsrc
  255.  *        B = (1 - Asrc) * Bdest + Bsrc            B = (1 - Asrc) * Bdest + Asrc * Bsrc
  256.  *
  257.  * Note that the use of other blending modes to implement antialiasing is performed
  258.  * automatically by the drawing engine when the kQATag_Antialias variable !=
  259.  * kQAAntiAlias_Fast. The driving software should continue to use the alpha fields
  260.  * for transparency even when antialiasing is being used (the drawing engine will
  261.  * resolve the multiple blending requirements as best as it can).
  262.  *
  263.  * Drawing engines which perform front-to-back Z-sorted rendering should replace
  264.  * the blending function shown above with the equivalent front-to-back formula.
  265.  */
  266.  
  267. typedef struct TQAVGouraud
  268. {
  269.     float                x;        /* X pixel coordinate, 0.0 <= x < width */
  270.     float                y;        /* Y pixel coordinate, 0.0 <= y < height */
  271.     float                z;        /* Z coordinate, 0.0 <= z <= 1.0 */
  272.     float                invW;    /* 1 / w; required only when kQAPerspectiveZ_On is set */
  273.     
  274.     float                r;        /* Red, 0.0 <= r <= 1.0 */
  275.     float                g;        /* Green, 0.0 <= g <= 1.0 */
  276.     float                b;        /* Blue, 0.0 <= b <= 1.0 */
  277.     float                a;        /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
  278. } TQAVGouraud;
  279.  
  280. /*
  281.  * TQAVTexture is used for texture mapping. The texture mapping operation
  282.  * is controlled by the kQATag_TextureOp variable, which is a mask of
  283.  * kQATextureOp_None/Modulate/Highlight/Decal. Below is pseudo-code for the
  284.  * texture shading operation:
  285.  *
  286.  *        texPix = TextureLookup (uq/q, vq/q);
  287.  *        if (kQATextureOp_Decal)
  288.  *        {
  289.  *            texPix.r = texPix.a * texPix.r + (1 - texPix.a) * r;
  290.  *            texPix.g = texPix.a * texPix.g + (1 - texPix.a) * g;
  291.  *            texPix.b = texPix.a * texPix.b + (1 - texPix.a) * b;
  292.  *            texPix.a = a;
  293.  *        }
  294.  *        else
  295.  *        {
  296.  *            texPix.a = texPix.a * a;
  297.  *        }
  298.  *        if (kQATextureOp_Modulate)
  299.  *        {
  300.  *            texPix.r *= kd_r;        // Clamped to prevent overflow
  301.  *            texPix.g *= kd_g;        // Clamped to prevent overflow
  302.  *            texPix.b *= kd_b;        // Clamped to prevent overflow
  303.  *        }
  304.  *        if (kQATextureOp_Highlight)
  305.  *        {
  306.  *            texPix.r += ks_r;        // Clamped to prevent overflow
  307.  *            texPix.g += ks_g;        // Clamped to prevent overflow
  308.  *            texPix.b += ks_b;        // Clamped to prevent overflow
  309.  *        }
  310.  *
  311.  * After computation of texPix, transparency blending (as shown
  312.  * above for TQAVGouraud) is performed.
  313.  */
  314.  
  315. typedef struct TQAVTexture
  316. {
  317.     float                x;        /* X pixel coordinate, 0.0 <= x < width */
  318.     float                y;        /* Y pixel coordinate, 0.0 <= y < height */
  319.     float                z;        /* Z coordinate, 0.0 <= z <= 1.0 */
  320.     float                invW;    /* 1 / w (always required) */
  321.     
  322.     /* rgb are used only when kQATextureOp_Decal is set. a is always required */
  323.     
  324.     float                r;        /* Red, 0.0 <= r <= 1.0 */
  325.     float                g;        /* Green, 0.0 <= g <= 1.0 */
  326.     float                b;        /* Blue, 0.0 <= b <= 1.0 */
  327.     float                a;        /* Alpha, 0.0 <= a <= 1.0, 1.0 is opaque */
  328.  
  329.     /* uOverW and vOverW are required by all modes */
  330.     
  331.     float                uOverW;    /* u / w */
  332.     float                vOverW;    /* v / w */
  333.     
  334.     /* kd_r/g/b are used only when kQATextureOp_Modulate is set */
  335.     
  336.     float                kd_r;    /* Scale factor for texture red, 0.0 <= kd_r */
  337.     float                kd_g;    /* Scale factor for texture green, 0.0 <= kd_g */
  338.     float                kd_b;    /* Scale factor for texture blue, 0.0 <= kd_b */
  339.     
  340.     /* ks_r/g/b are used only when kQATextureOp_Highlight is set */
  341.     
  342.     float                ks_r;    /* Red specular highlight, 0.0 <= ks_r <= 1.0 */
  343.     float                ks_g;    /* Green specular highlight, 0.0 <= ks_g <= 1.0 */
  344.     float                ks_b;    /* Blue specular highlight, 0.0 <= ks_b <= 1.0 */
  345. } TQAVTexture;
  346.  
  347. /************************************************************************************************
  348.  *
  349.  * Constants used for the state variables.
  350.  *
  351.  ***********************************************************************************************/
  352.  
  353. /*
  354.  * kQATag_xxx is used to select a state variable when calling QASetFloat(), QASetInt(),
  355.  * QAGetFloat() and QAGetInt(). The kQATag values are split into two separate
  356.  * enumerated types: TQATagInt and TQATagFloat. TQATagInt is used for the QASet/GetInt()
  357.  * functions, and TQATagFloat is used for the QASet/GetFloat() functions. (This is so
  358.  * that a compiler that typechecks enums can flag a float/int tag mismatch during compile.)
  359.  *
  360.  * These variables are required by all drawing engines:
  361.  *        kQATag_ZFunction            (Int)    One of kQAZFunction_xxx
  362.  *        kQATag_ColorBG_a            (Float)    Background color alpha
  363.  *        kQATag_ColorBG_r            (Float)    Background color red
  364.  *        kQATag_ColorBG_g            (Float)    Background color green
  365.  *        kQATag_ColorBG_b            (Float)    Background color blue
  366.  *        kQATag_Width                (Float)    Line and point width (pixels)
  367.  *        kQATag_ZMinOffset            (Float)    Min offset to Z to guarantee visibility (Read only!)
  368.  *        kQATag_ZMinScale            (Float)    Min scale to Z to guarantee visibility (Read only!)
  369.  
  370.  * These variables are used for optional features:
  371.  *        kQATag_Antialias            (Int)    One of kQAAntiAlias_xxx
  372.  *        kQATag_Blend                (Int)    One of kQABlend_xxx
  373.  *        kQATag_PerspectiveZ            (Int)    One of kQAPerspectiveZ_xxx
  374.  *        kQATag_TextureFilter        (Int)    One of kQATextureFilter_xxx
  375.  *        kQATag_TextureOp            (Int)    Mask of kQATextureOp_xxx
  376.  *        kQATag_Texture                (Int)    Pointer to current TQATexture
  377.  *        kQATag_CSGTag                (Int)    One of kQACSGTag_xxx
  378.  *        kQATag_CSGEquation            (Int)    32 bit CSG truth table
  379.  *
  380.  * These variables are used for OpenGL™ support:
  381.  *        kQATagGL_DrawBuffer            (Int)    Mask of kQAGL_DrawBuffer_xxx
  382.  *        kQATagGL_TextureWrapU        (Int)    kQAGL_Clamp or kQAGL_Repeat
  383.  *        kQATagGL_TextureWrapV        (Int)    kQAGL_Clamp or kQAGL_Repeat
  384.  *        kQATagGL_TextureMagFilter    (Int)    kQAGL_Nearest or kQAGL_Linear
  385.  *        kQATagGL_TextureMinFilter    (Int)    kQAGL_Nearest, etc.
  386.  *        kQATagGL_ScissorXMin        (Int)    Minimum X value for scissor rectangle
  387.  *        kQATagGL_ScissorYMin        (Int)    Minimum Y value for scissor rectangle
  388.  *        kQATagGL_ScissorXMax        (Int)    Maximum X value for scissor rectangle
  389.  *        kQATagGL_ScissorYMax        (Int)    Maximum Y value for scissor rectangle
  390.  *        kQATagGL_BlendSrc            (Int)    Source blending operation
  391.  *        kQATagGL_BlendDst            (Int)    Destination blending operation
  392.  *        kQATagGL_LinePattern        (Int)    Line rasterization pattern
  393.  *        kQATagGL_AreaPattern0        (Int)    First of 32 area pattern registers
  394.  *        kQATagGL_AreaPattern31        (Int)    Last of 32 area pattern registers
  395.  *        kQATagGL_DepthBG            (Float)    Background Z
  396.  *        kQATagGL_TextureBorder_a    (Float)    Texture border color alpha
  397.  *        kQATagGL_TextureBorder_r    (Float)    Texture border color red
  398.  *        kQATagGL_TextureBorder_g    (Float)    Texture border color green
  399.  *        kQATagGL_TextureBorder_b    (Float)    Texture border color blue
  400.  *
  401.  * Tags >= kQATag_EngineSpecific_Minimum may be assigned by the vendor for use as
  402.  * engine-specific variables. NOTE: These should be used only in exceptional circumstances,
  403.  * as functions performed by these variables won't be generally accessible. All other tag
  404.  * values are reserved.
  405.  *
  406.  *        kQATag_EngineSpecific_Minimum    Minimum tag value for drawing-engine specific variables
  407.  */
  408.  
  409. typedef enum TQATagInt
  410. {
  411.     kQATag_ZFunction                = 0,
  412.     kQATag_Antialias                = 8,
  413.     kQATag_Blend                    = 9,
  414.     kQATag_PerspectiveZ                = 10,
  415.     kQATag_TextureFilter            = 11,
  416.     kQATag_TextureOp                = 12,
  417.     kQATag_CSGTag                    = 14,
  418.     kQATag_CSGEquation                = 15,
  419.     kQATag_BufferComposite            = 16,
  420.     kQATagGL_DrawBuffer                = 100,
  421.     kQATagGL_TextureWrapU            = 101,
  422.     kQATagGL_TextureWrapV            = 102,
  423.     kQATagGL_TextureMagFilter        = 103,
  424.     kQATagGL_TextureMinFilter        = 104,
  425.     kQATagGL_ScissorXMin            = 105,
  426.     kQATagGL_ScissorYMin            = 106,
  427.     kQATagGL_ScissorXMax            = 107,
  428.     kQATagGL_ScissorYMax            = 108,
  429.     kQATagGL_BlendSrc                = 109,
  430.     kQATagGL_BlendDst                = 110,
  431.     kQATagGL_LinePattern            = 111,
  432.     kQATagGL_AreaPattern0            = 117,
  433.         /* ...1-30 */
  434.     kQATagGL_AreaPattern31            = 148,
  435.     kQATag_EngineSpecific_Minimum    = 1000
  436. } TQATagInt;
  437.  
  438. typedef enum TQATagPtr
  439. {
  440.     kQATag_Texture                    = 13
  441. } TQATagPtr;
  442.  
  443. typedef enum TQATagFloat
  444. {
  445.     kQATag_ColorBG_a                = 1,
  446.     kQATag_ColorBG_r                = 2,
  447.     kQATag_ColorBG_g                = 3,
  448.     kQATag_ColorBG_b                = 4,
  449.     kQATag_Width                    = 5,
  450.     kQATag_ZMinOffset                = 6,
  451.     kQATag_ZMinScale                = 7,
  452.     kQATagGL_DepthBG                = 112,
  453.     kQATagGL_TextureBorder_a        = 113,
  454.     kQATagGL_TextureBorder_r        = 114,
  455.     kQATagGL_TextureBorder_g        = 115,
  456.     kQATagGL_TextureBorder_b        = 116
  457. } TQATagFloat;
  458.  
  459. /* kQATag_ZFunction */
  460. #define kQAZFunction_None            0    /* Z is neither tested nor written (same as no Z buffer) */
  461. #define kQAZFunction_LT                1    /* Znew < Zbuffer is visible */
  462. #define kQAZFunction_EQ                2    /* OpenGL Only: Znew == Zbuffer is visible */
  463. #define kQAZFunction_LE                3    /* OpenGL Only: Znew <= Zbuffer is visible */
  464. #define kQAZFunction_GT                4    /* OpenGL Only: Znew > Zbuffer is visible */
  465. #define kQAZFunction_NE                5    /* OpenGL Only: Znew != Zbuffer is visible */
  466. #define kQAZFunction_GE                6    /* OpenGL Only: Znew >= Zbuffer is visible */
  467. #define kQAZFunction_True            7    /* Znew is always visible */
  468.  
  469. /* kQATag_Width */
  470. #define kQAMaxWidth                    128.0
  471.  
  472. /* kQATag_Antialias */
  473. #define kQAAntiAlias_Off            0
  474. #define kQAAntiAlias_Fast            1
  475. #define kQAAntiAlias_Mid            2
  476. #define kQAAntiAlias_Best            3
  477.  
  478. /* kQATag_Blend */
  479. #define kQABlend_PreMultiply        0
  480. #define kQABlend_Interpolate        1
  481. #define kQABlend_OpenGL                2
  482.  
  483. /* kQATag_BufferComposite */
  484. #define kQABufferComposite_None            0    /* Default: New pixels overwrite initial buffer contents */
  485. #define kQABufferComposite_PreMultiply    1    /* New pixels are blended with initial buffer contents via PreMultiply */
  486. #define kQABufferComposite_Interpolate    2    /* New pixels are blended with initial buffer contents via Interpolate */
  487.  
  488. /* kQATag_PerspectiveZ */
  489. #define kQAPerspectiveZ_Off            0    /* Use Z for hidden surface removal */
  490. #define kQAPerspectiveZ_On            1    /* Use InvW for hidden surface removal */
  491.  
  492. /* kQATag_TextureFilter */
  493. #define kQATextureFilter_Fast        0
  494. #define kQATextureFilter_Mid        1
  495. #define kQATextureFilter_Best        2
  496.  
  497. /* kQATag_TextureOp (mask of one or more) */
  498. #define kQATextureOp_None        0                /* Default texture mapping mode */
  499. #define kQATextureOp_Modulate    (1 << 0)        /* Modulate texture color with kd_r/g/b */
  500. #define kQATextureOp_Highlight    (1 << 1)        /* Add highlight value ks_r/g/b */
  501. #define kQATextureOp_Decal        (1 << 2)        /* When texture alpha == 0, use rgb instead */
  502. #define kQATextureOp_Shrink        (1 << 3)        /* This is a non-wrapping texture, so the ??? */
  503.  
  504. /* kQATag_CSGTag */
  505. #define kQACSGTag_None            0xffffffffUL    /* Do not perform CSG */
  506. #define kQACSGTag_0                0                /* Submitted tris have CSG ID 0 */
  507. #define kQACSGTag_1                1                /* Submitted tris have CSG ID 1 */
  508. #define kQACSGTag_2                2                /* Submitted tris have CSG ID 2 */
  509. #define kQACSGTag_3                3                /* Submitted tris have CSG ID 3 */
  510. #define kQACSGTag_4                4                /* Submitted tris have CSG ID 4 */
  511.  
  512. /* kQATagGL_TextureWrapU/V */
  513. #define kQAGL_Repeat                0
  514. #define kQAGL_Clamp                    1
  515.  
  516. /* kQATagGL_BlendSrc */
  517. #define kQAGL_SourceBlend_XXX        0
  518.  
  519. /* kQATagGL_BlendDst */
  520. #define kQAGL_DestBlend_XXX            0
  521.  
  522. /* kQATagGL_DrawBuffer (mask of one or more) */
  523. #define kQAGL_DrawBuffer_None        0
  524. #define kQAGL_DrawBuffer_FrontLeft    (1<<0)
  525. #define kQAGL_DrawBuffer_FrontRight    (1<<1)
  526. #define kQAGL_DrawBuffer_BackLeft    (1<<2)
  527. #define kQAGL_DrawBuffer_BackRight    (1<<3)
  528. #define kQAGL_DrawBuffer_Front        (kQAGL_DrawBuffer_FrontLeft | kQAGL_DrawBuffer_FrontRight)
  529. #define kQAGL_DrawBuffer_Back        (kQAGL_DrawBuffer_BackLeft | kQAGL_DrawBuffer_BackRight)
  530.  
  531. /************************************************************************************************
  532.  *
  533.  * Constants used as function parameters.
  534.  *
  535.  ***********************************************************************************************/
  536.  
  537. /*
  538.  * TQAVertexMode is a parameter to QADrawVGouraud() and QADrawVTexture() that specifies how
  539.  * to interpret and draw the vertex array.
  540.  */
  541.  
  542. typedef enum TQAVertexMode
  543. {
  544.     kQAVertexMode_Point                = 0,        /* Draw nVertices points */
  545.     kQAVertexMode_Line                = 1,        /* Draw nVertices/2 line segments */
  546.     kQAVertexMode_Polyline            = 2,        /* Draw nVertices-1 connected line segments */
  547.     kQAVertexMode_Tri                = 3,        /* Draw nVertices/3 triangles */
  548.     kQAVertexMode_Strip                = 4,        /* Draw nVertices-2 triangles as a strip */
  549.     kQAVertexMode_Fan                = 5,            /* Draw nVertices-2 triangles as a fan from v0 */
  550.     kQAVertexMode_NumModes            = 6
  551.  
  552. } TQAVertexMode;
  553.  
  554. /*
  555.  * TQAGestaltSelector is a parameter to QAEngineGestalt(). It selects which gestalt
  556.  * parameter will be copied into 'response'.
  557.  */
  558.  
  559. typedef enum TQAGestaltSelector
  560. {
  561.     kQAGestalt_OptionalFeatures        = 0,        /* Mask of one or more kQAOptional_xxx */
  562.     kQAGestalt_FastFeatures            = 1,        /* Mask of one or more kQAFast_xxx */
  563.     kQAGestalt_VendorID                = 2,        /* Vendor ID */
  564.     kQAGestalt_EngineID                = 3,        /* Engine ID */
  565.     kQAGestalt_Revision                = 4,        /* Revision number of this engine */
  566.     kQAGestalt_ASCIINameLength        = 5,        /* strlen (asciiName) */
  567.     kQAGestalt_ASCIIName            = 6,        /* Causes strcpy (response, asciiName) */
  568.     kQAGestalt_TextureMemory        = 7,        /* amount of texture RAM currently available */
  569.     kQAGestalt_FastTextureMemory    = 8,        /* amount of texture RAM currently available */
  570.     kQAGestalt_NumSelectors            = 9
  571.  
  572. } TQAGestaltSelector;
  573.  
  574. /*
  575.  * TQAMethodSelector is a parameter to QASetNoticeMethod to select the notice method
  576.  */
  577.  
  578. typedef enum TQAMethodSelector
  579. {
  580.     kQAMethod_RenderCompletion        = 0,        /* Called when rendering has completed and buffers swapped */
  581.     kQAMethod_DisplayModeChanged    = 1,        /* Called when a display mode has changed */
  582.     kQAMethod_ReloadTextures        = 2,        /* Called when texture memory has been invalidated */
  583.     kQAMethod_BufferInitialize        = 3,        /* Called when a buffer needs to be initialized */
  584.     kQAMethod_BufferComposite        = 4,        /* Called when rendering is finished and its safe to composite */
  585.     kQAMethod_NumSelectors            = 5
  586.     
  587. } TQAMethodSelector;
  588.  
  589. /*
  590.  * kQATriFlags_xxx are ORed together to generate the 'flags' parameter
  591.  * to QADrawTriGouraud() and QADrawTriTexture().
  592.  */
  593.  
  594. #define    kQATriFlags_None            0            /* No flags (triangle is front-facing or don't care) */
  595. #define kQATriFlags_Backfacing        (1 << 0)    /* Triangle is back-facing */
  596.  
  597. /*
  598.  * kQATexture_xxx are ORed together to generate the 'flags' parameter to QATextureNew().
  599.  */
  600.  
  601. #define    kQATexture_None                0            /* No flags */
  602. #define kQATexture_Lock                (1<<0)        /* Don't swap this texture out */
  603. #define kQATexture_Mipmap            (1<<1)        /* This texture is mipmapped */
  604. #define kQATexture_NoCompression    (1<<2)        /* Do not compress this texture */
  605. #define kQATexture_HighCompression    (1<<3)        /* Compress texture, even if it takes a while */
  606.  
  607. /*
  608.  * kQABitmap_xxx are ORed together to generate the 'flags' parameter to QABitmapNew().
  609.  */
  610.  
  611. #define    kQABitmap_None                0            /* No flags */
  612. #define kQABitmap_Lock                (1<<1)        /* Don't swap this bitmap out */
  613. #define kQABitmap_NoCompression        (1<<2)        /* Do not compress this bitmap */
  614. #define kQABitmap_HighCompression    (1<<3)        /* Compress bitmap, even if it takes a while */
  615.  
  616. /*
  617.  * kQAContext_xxx are ORed together to generate the 'flags' parameter for QADrawContextNew().
  618.  */
  619.  
  620. #define kQAContext_None                0            /* No flags */
  621. #define kQAContext_NoZBuffer        (1 << 0)    /* No hidden surface removal */
  622. #define kQAContext_DeepZ            (1 << 1)    /* Hidden surface precision >= 24 bits */
  623. #define kQAContext_DoubleBuffer        (1 << 2)    /* Double buffered window */
  624. #define kQAContext_Cache            (1 << 3)    /* This is a cache context */
  625.  
  626. /*
  627.  * kQAOptional_xxx are ORed together to generate the kQAGestalt_OptionalFeatures response
  628.  * from QAEngineGestalt().
  629.  */
  630.  
  631. #define kQAOptional_None            0            /* No optional features */
  632. #define kQAOptional_DeepZ            (1 << 0)    /* Hidden surface precision >= 24 bits */
  633. #define kQAOptional_Texture            (1 << 1)    /* Texture mapping */
  634. #define kQAOptional_TextureHQ        (1 << 2)    /* High quality texture (tri-linear mip or better) */
  635. #define kQAOptional_TextureColor    (1 << 3)    /* Full color modulation and highlight of textures */
  636. #define kQAOptional_Blend            (1 << 4)    /* Transparency blending of RGB */
  637. #define kQAOptional_BlendAlpha        (1 << 5)    /* Transparency blending includes alpha channel */
  638. #define kQAOptional_Antialias        (1 << 6)    /* Antialiased rendering */
  639. #define kQAOptional_ZSorted            (1 << 7)    /* Z sorted rendering (for transparency, etc.) */
  640. #define kQAOptional_PerspectiveZ    (1 << 8)    /* Hidden surface removal using InvW instead of Z */
  641. #define kQAOptional_OpenGL            (1 << 9)    /* Extended rasterization features for OpenGL™ */
  642. #define kQAOptional_NoClear            (1 << 10)    /* This drawing engine doesn't clear before drawing */
  643. #define kQAOptional_CSG                (1 << 11)    /* kQATag_CSGxxx are implemented */
  644. #define kQAOptional_BoundToDevice    (1 << 12)    /* This engine is tightly bound to GDevice */
  645. #define kQAOptional_CL4                (1 << 13)    /* This engine suports kQAPixel_CL4 */
  646. #define kQAOptional_CL8                (1 << 14)    /* This engine suports kQAPixel_CL8 */
  647. #define kQAOptional_BufferComposite    (1 << 15)    /* This engine can composite with initial buffer contents */
  648.  
  649. /*
  650.  * kQAFast_xxx are ORed together to generate the kQAGestalt_FastFeatures response
  651.  * from QAEngineGestalt().
  652.  */
  653.  
  654. #define kQAFast_None                0            /* No accelerated features */
  655. #define kQAFast_Line                (1 << 0)    /* Line drawing */
  656. #define kQAFast_Gouraud                (1 << 1)    /* Gouraud shaded triangles */
  657. #define kQAFast_Texture                (1 << 2)    /* Texture mapped triangles */
  658. #define kQAFast_TextureHQ            (1 << 3)    /* High quality texture (tri-linear mip or better) */
  659. #define kQAFast_Blend                (1 << 4)    /* Transparency blending */
  660. #define kQAFast_Antialiasing        (1 << 5)    /* Antialiased rendering */
  661. #define kQAFast_ZSorted                (1 << 6)    /* Z sorted rendering of non-opaque objects */
  662. #define kQAFast_CL4                    (1 << 7)    /* This engine accelerates kQAPixel_CL4 */
  663. #define kQAFast_CL8                    (1 << 8)    /* This engine accelerates kQAPixel_CL8 */
  664.  
  665. /************************************************************************************************
  666.  *
  667.  * Macro definitions for the drawing engine methods included in TQADrawContext. These
  668.  * macros are the recommended means of accessing the engine's draw methods, e.g:
  669.  *
  670.  *        TQADrawContext    *drawContext;
  671.  *        TQAVTexture        vertices[3];
  672.  *
  673.  *        drawContext = QADrawContextNew (rect, gdevice, engine, kQAContext_ZBuffer);
  674.  *        ...
  675.  *        QASetInt (drawContext, kQATag_ZFunction, kQAZFunction_LT);
  676.  *        QADrawTriGouraud (drawContext, &vertices[0], &vertices[1], &vertices[2], kQATriFlags_None);
  677.  *
  678.  * Note that QARenderStart(), QARenderEnd(), QAFlush() and QASync() have real function
  679.  * definitions instead of macros. This is because these functions can afford the extra
  680.  * per-call overhead of a function layer (which makes application code a little smaller),
  681.  * and to allow a cleaner implementation of handling NULL parameters to QARenderStart().
  682.  *
  683.  ***********************************************************************************************/
  684.  
  685. #define QASetFloat(drawContext,tag,newValue) \
  686.         (drawContext)->setFloat (drawContext,tag,newValue)
  687.  
  688. #define QASetInt(drawContext,tag,newValue) \
  689.         (drawContext)->setInt (drawContext,tag,newValue)
  690.  
  691. #define QASetPtr(drawContext,tag,newValue) \
  692.         (drawContext)->setPtr (drawContext,tag,newValue)
  693.  
  694. #define QAGetFloat(drawContext,tag) \
  695.         (drawContext)->getFloat (drawContext,tag)
  696.  
  697. #define QAGetInt(drawContext,tag) \
  698.         (drawContext)->getInt (drawContext,tag)
  699.  
  700. #define QAGetPtr(drawContext,tag) \
  701.         (drawContext)->getPtr (drawContext,tag)
  702.  
  703. #define QADrawPoint(drawContext,v) \
  704.         (drawContext)->drawPoint (drawContext,v)
  705.  
  706. #define QADrawLine(drawContext,v0,v1) \
  707.         (drawContext)->drawLine (drawContext,v0,v1)
  708.  
  709. #define QADrawTriGouraud(drawContext,v0,v1,v2,flags) \
  710.         (drawContext)->drawTriGouraud (drawContext,v0,v1,v2,flags)
  711.  
  712. #define QADrawTriTexture(drawContext,v0,v1,v2,flags) \
  713.         (drawContext)->drawTriTexture (drawContext,v0,v1,v2,flags)
  714.  
  715. #define QASubmitVerticesGouraud(drawContext,nVertices,vertices) \
  716.         (drawContext)->submitVerticesGouraud(drawContext,nVertices,vertices)
  717.         
  718. #define QASubmitVerticesTexture(drawContext,nVertices,vertices) \
  719.         (drawContext)->submitVerticesTexture(drawContext,nVertices,vertices)
  720.         
  721. #define QADrawTriMeshGouraud(drawContext,nTriangle,triangles) \
  722.         (drawContext)->drawTriMeshGouraud (drawContext,nTriangle,triangles)
  723.  
  724. #define QADrawTriMeshTexture(drawContext,nTriangle,triangles) \
  725.         (drawContext)->drawTriMeshTexture (drawContext,nTriangle,triangles)
  726.  
  727. #define QADrawVGouraud(drawContext,nVertices,vertexMode,vertices,flags) \
  728.         (drawContext)->drawVGouraud (drawContext,nVertices,vertexMode,vertices,flags)
  729.  
  730. #define QADrawVTexture(drawContext,nVertices,vertexMode,vertices,flags) \
  731.         (drawContext)->drawVTexture (drawContext,nVertices,vertexMode,vertices,flags)
  732.  
  733. #define QADrawBitmap(drawContext,v,bitmap) \
  734.         (drawContext)->drawBitmap (drawContext,v,bitmap)
  735.  
  736. #define QARenderStart(drawContext,dirtyRect,initialContext) \
  737.         (drawContext)->renderStart (drawContext,dirtyRect,initialContext)
  738.  
  739. #define QARenderEnd(drawContext,modifiedRect) \
  740.         (drawContext)->renderEnd (drawContext,modifiedRect)
  741.  
  742. #define QARenderAbort(drawContext) \
  743.         (drawContext)->renderAbort (drawContext)
  744.  
  745. #define QAFlush(drawContext) \
  746.         (drawContext)->flush (drawContext)
  747.  
  748. #define QASync(drawContext) \
  749.         (drawContext)->sync (drawContext)
  750.  
  751. #define QASetNoticeMethod(drawContext, method, completionCallBack, refCon) \
  752.         (drawContext)->setNoticeMethod (drawContext, method, completionCallBack, refCon)
  753.  
  754. #define QAGetNoticeMethod(drawContext, method, completionCallBack, refCon) \
  755.         (drawContext)->getNoticeMethod (drawContext, method, completionCallBack, refCon)
  756.  
  757. /************************************************************************************************
  758.  *
  759.  * Typedefs of draw method functions provided by the drawing engine. One function pointer
  760.  * for each of these function types in stored in the TQADrawContext public data structure.
  761.  *
  762.  * These functions should be accessed through the QA<function>(context,...) macros,
  763.  * defined above.
  764.  *
  765.  ***********************************************************************************************/
  766.  
  767. typedef void (*TQAStandardNoticeMethod)(
  768.     const TQADrawContext    *drawContext,        /* Draw context */
  769.     void                    *refCon);            /* user define parameter */
  770.  
  771. typedef void (*TQABufferNoticeMethod)(
  772.     const TQADrawContext    *drawContext,        /* Draw context */
  773.     const TQADevice            *buffer,            /* TQADevice describing back buffer */
  774.     const TQARect            *dirtyRect,            /* Minimum area to process; NULL means whole buffer */
  775.     void                    *refCon);            /* user define parameter */
  776.  
  777. typedef union TQANoticeMethod
  778. {
  779.     TQAStandardNoticeMethod    standardNoticeMethod;    /* Used for non-buffer related methods */
  780.     TQABufferNoticeMethod    bufferNoticeMethod;        /* Used for buffer handling methods */
  781.     
  782. } TQANoticeMethod;
  783.  
  784. typedef void (*TQASetFloat) (
  785.     TQADrawContext            *drawContext,        /* Draw context */
  786.     TQATagFloat                tag,                /* Tag of variable to set */
  787.     float                    newValue);            /* New value for variable */
  788.  
  789. typedef void (*TQASetInt) (
  790.     TQADrawContext            *drawContext,        /* Draw context */
  791.     TQATagInt                tag,                /* Tag of variable to set */
  792.     unsigned long            newValue);            /* New value for variable */
  793.  
  794. typedef void (*TQASetPtr) (
  795.     TQADrawContext            *drawContext,        /* Draw context */
  796.     TQATagPtr                tag,                /* Tag of variable to set */
  797.     const void                *newValue);            /* New value for variable */
  798.  
  799. typedef float (*TQAGetFloat) (
  800.     const TQADrawContext    *drawContext,        /* Draw context */
  801.     TQATagFloat                tag);                /* Tag of variable to get */
  802.  
  803. typedef unsigned long (*TQAGetInt) (
  804.     const TQADrawContext    *drawContext,        /* Draw context */
  805.     TQATagInt                tag);                /* Tag of variable to get */
  806.  
  807. typedef void *(*TQAGetPtr) (
  808.     const TQADrawContext    *drawContext,        /* Draw context */
  809.     TQATagPtr                tag);                /* Tag of variable to get */
  810.  
  811. typedef void (*TQADrawPoint) (
  812.     const TQADrawContext    *drawContext,        /* Draw context */
  813.     const TQAVGouraud        *v);                /* Vertex */
  814.  
  815. typedef void (*TQADrawLine) (
  816.     const TQADrawContext    *drawContext,        /* Draw context */
  817.     const TQAVGouraud         *v0,                /* Vertex 0 */
  818.     const TQAVGouraud         *v1);                /* Vertex 1 */
  819.  
  820. typedef void (*TQADrawTriGouraud) (
  821.     const TQADrawContext    *drawContext,        /* Draw context */
  822.     const TQAVGouraud         *v0,                /* Vertex 0 */
  823.     const TQAVGouraud         *v1,                /* Vertex 1 */
  824.     const TQAVGouraud         *v2,                /* Vertex 2 */
  825.     unsigned long            flags);                /* Mask of kQATriFlags_xxx flags */
  826.  
  827. typedef void (*TQADrawTriTexture) (
  828.     const TQADrawContext    *drawContext,        /* Draw context */
  829.     const TQAVTexture         *v0,                /* Vertex 0 */
  830.     const TQAVTexture         *v1,                /* Vertex 1 */
  831.     const TQAVTexture         *v2,                /* Vertex 2 */
  832.     unsigned long            flags);                /* Mask of kQATriFlags_xxx flags */
  833.  
  834. typedef void (*TQASubmitVerticesGouraud) (
  835.     const TQADrawContext        *drawContext,    /* Draw context */
  836.     unsigned long                 nVertices,        /* Number of vertices */
  837.     const TQAVGouraud             *vertices);        /* Array of vertices */
  838.     
  839. typedef void (*TQASubmitVerticesTexture) (
  840.     const TQADrawContext        *drawContext,    /* Draw context */
  841.     unsigned long                 nVertices,        /* Number of vertices */
  842.     const TQAVTexture            *vertices);        /* Array of vertices */
  843.     
  844. typedef void (*TQADrawTriMeshGouraud) (
  845.     const TQADrawContext        *drawContext,    /* Draw context */
  846.     unsigned long                 nTriangles,        /* Number of triangles */
  847.     const TQAIndexedTriangle    *triangles);    /* Array of triangles */
  848.     
  849. typedef void (*TQADrawTriMeshTexture) (
  850.     const TQADrawContext        *drawContext,    /* Draw context */
  851.     unsigned long                 nTriangles,        /* Number of triangles */
  852.     const TQAIndexedTriangle     *triangles);    /* Array of triangles */
  853.  
  854. typedef void (*TQADrawVGouraud) (
  855.     const TQADrawContext    *drawContext,        /* Draw context */
  856.     unsigned long            nVertices,            /* Number of vertices */
  857.     TQAVertexMode            vertexMode,            /* One of kQAVertexMode_xxx enumerated values */
  858.     const TQAVGouraud         vertices[],            /* Array of vertices */
  859.     const unsigned long        flags[]);            /* Array of per-triangle flags (or NULL) */
  860.  
  861. typedef void (*TQADrawVTexture) (
  862.     const TQADrawContext    *drawContext,        /* Draw context */
  863.     unsigned long            nVertices,            /* Number of vertices */
  864.     TQAVertexMode            vertexMode,            /* One of kQAVertexMode_xxx enumerated values */
  865.     const TQAVTexture         vertices[],            /* Array of vertices */
  866.     const unsigned long        flags[]);            /* Array of per-triangle flags (or NULL) */
  867.  
  868. typedef void (*TQADrawBitmap) (
  869.     const TQADrawContext    *drawContext,        /* Draw context */
  870.     const TQAVGouraud         *v,                    /* xyz, and (if a 1 bit/pixel bitmap) argb */
  871.     TQABitmap                *bitmap);            /* Previously allocated by QABitmapNew() */
  872.  
  873. typedef void (*TQARenderStart) (
  874.     const TQADrawContext    *drawContext,        /* Draw context */
  875.     const TQARect            *dirtyRect,            /* Minimum area to clear; NULL means whole buffer */
  876.     const TQADrawContext    *initialContext);    /* Initial background image (or NULL) */
  877.  
  878. typedef TQAError (*TQARenderEnd) (
  879.     const TQADrawContext    *drawContext,        /* Draw context */
  880.     const TQARect            *modifiedRect);        /* Minimum area to swap; NULL means whole buffer */
  881.  
  882. typedef TQAError (*TQARenderAbort) (
  883.     const TQADrawContext    *drawContext);        /* Draw context */
  884.  
  885. typedef TQAError (*TQAFlush) (
  886.     const TQADrawContext    *drawContext);        /* Draw context */
  887.  
  888. typedef TQAError (*TQASync) (
  889.     const TQADrawContext    *drawContext);        /* Draw context */
  890.  
  891. typedef TQAError (*TQASetNoticeMethod)(
  892.     const TQADrawContext    *drawContext,        /* Draw context */
  893.     TQAMethodSelector        method,
  894.     TQANoticeMethod            completionCallBack,
  895.     void                    *refCon);
  896.  
  897. typedef TQAError (*TQAGetNoticeMethod)(
  898.     const TQADrawContext    *drawContext,        /* Draw context */
  899.     TQAMethodSelector        method,
  900.     TQANoticeMethod            *completionCallBack,
  901.     void                    **refCon);
  902.  
  903. /************************************************************************************************
  904.  *
  905.  * Public TQADrawContext structure. This contains function pointers for the chosen
  906.  * drawing engine.
  907.  *
  908.  ***********************************************************************************************/
  909.  
  910. /*
  911.  * TQAVersion sets the TQADrawContext 'version' field. It is set by
  912.  * the manager to indicate the version of the TQADrawContext structure.
  913.  */
  914.  
  915. typedef enum TQAVersion
  916. {
  917.     kQAVersion_Prerelease        = 0,
  918.     kQAVersion_1_0                = 1,
  919.     kQAVersion_1_0_5            = 2,            /* Added tri mesh functions, color tables */
  920.     kQAVersion_1_1                = 3                /* Added call backs, texture compression, and new error return code */
  921.  
  922. } TQAVersion;
  923.  
  924. struct TQADrawContext
  925. {
  926.     TQADrawPrivate            *drawPrivate;        /* Engine's private data for this context */
  927.     const TQAVersion        version;            /* Version number */
  928.     TQASetFloat                setFloat;            /* Method: Set a float state variable */
  929.     TQASetInt                setInt;                /* Method: Set an unsigned long state variable */
  930.     TQASetPtr                setPtr;                /* Method: Set an unsigned long state variable */
  931.     TQAGetFloat                getFloat;            /* Method: Get a float state variable */
  932.     TQAGetInt                getInt;                /* Method: Get an unsigned long state variable */
  933.     TQAGetPtr                getPtr;                /* Method: Get an pointer state variable */
  934.     TQADrawPoint            drawPoint;            /* Method: Draw a point */
  935.     TQADrawLine                drawLine;            /* Method: Draw a line */
  936.     TQADrawTriGouraud        drawTriGouraud;        /* Method: Draw a Gouraud shaded triangle */
  937.     TQADrawTriTexture        drawTriTexture;        /* Method: Draw a texture mapped triangle */
  938.     TQADrawVGouraud            drawVGouraud;        /* Method: Draw Gouraud vertices */
  939.     TQADrawVTexture            drawVTexture;        /* Method: Draw texture vertices */
  940.     TQADrawBitmap            drawBitmap;            /* Method: Draw a bitmap */
  941.     TQARenderStart            renderStart;        /* Method: Initialize for rendering */
  942.     TQARenderEnd            renderEnd;            /* Method: Complete rendering and display */
  943.     TQARenderAbort            renderAbort;        /* Method: Abort any outstanding rendering (blocking) */
  944.     TQAFlush                flush;                /* Method: Start render of any queued commands (non-blocking) */
  945.     TQASync                    sync;                /* Method: Wait for completion of all rendering (blocking) */
  946.     TQASubmitVerticesGouraud    submitVerticesGouraud;    /* Method: Submit Gouraud vertices for trimesh */
  947.     TQASubmitVerticesTexture    submitVerticesTexture;    /* Method: Submit Texture vertices for trimesh */
  948.     TQADrawTriMeshGouraud        drawTriMeshGouraud;        /* Method: Draw a Gouraud triangle mesh */
  949.     TQADrawTriMeshTexture        drawTriMeshTexture;        /* Method: Draw a Texture triangle mesh */
  950.     TQASetNoticeMethod            setNoticeMethod;        /* Method: Set a notice method */
  951.     TQAGetNoticeMethod            getNoticeMethod;        /* Method: Get a notice method */
  952. };
  953.  
  954. /************************************************************************************************
  955.  *
  956.  * Acceleration manager function prototypes.
  957.  *
  958.  ***********************************************************************************************/
  959.  
  960. RAVE_EXPORT TQAError QADrawContextNew (
  961.     const TQADevice    *device,                /* Target device */
  962.     const TQARect    *rect,                    /* Target rectangle (device coordinates) */
  963.     const TQAClip    *clip,                    /* 2D clip region */
  964.     const TQAEngine    *engine,                /* Drawing engine to use */
  965.     unsigned long    flags,                    /* Mask of kQAContext_xxx */
  966.     TQADrawContext    **newDrawContext);        /* (Out) Newly created TQADrawContext */
  967.  
  968. RAVE_EXPORT void QADrawContextDelete (
  969.     TQADrawContext    *drawContext);            /* Context to delete */
  970.  
  971. RAVE_EXPORT TQAError QAColorTableNew(
  972.     const TQAEngine        *engine,            /* Drawing engine to use */
  973.     TQAColorTableType    tableType,            /* Depth, color space, etc. */
  974.     void                *pixelData,            /* lookup table entries in pixelType format */
  975.     long                transparentIndexFlag,    /* boolean, false means no transparency, true means index 0 is transparent */
  976.     TQAColorTable        **newTable);        /* (Out) Newly created TQAColorTable */
  977.  
  978. RAVE_EXPORT void QAColorTableDelete(
  979.     const TQAEngine        *engine,            /* Drawing engine to use */
  980.     TQAColorTable        *colorTable);        /* Previously allocated by QAColorTableNew() */
  981.  
  982. RAVE_EXPORT TQAError QATextureNew (
  983.     const TQAEngine        *engine,            /* Drawing engine to use */
  984.     unsigned long        flags,                /* Mask of kQATexture_xxx flags */
  985.     TQAImagePixelType    pixelType,            /* Depth, color space, etc. */
  986.     const TQAImage        images[],            /* Image(s) for texture */
  987.     TQATexture            **newTexture);        /* (Out) Newly created TQATexture, or NULL on error */ 
  988.  
  989. RAVE_EXPORT TQAError QATextureDetach (
  990.     const TQAEngine        *engine,            /* Drawing engine to use */
  991.     TQATexture            *texture);            /* Previously allocated by QATextureNew() */
  992.  
  993. RAVE_EXPORT void QATextureDelete (
  994.     const TQAEngine        *engine,            /* Drawing engine to use */
  995.     TQATexture            *texture);            /* Previously allocated by QATextureNew() */
  996.  
  997. RAVE_EXPORT TQAError QATextureBindColorTable(
  998.     const TQAEngine        *engine,            /* Drawing engine to use */
  999.     TQATexture            *texture,            /* Previously allocated by QATextureNew() */
  1000.     TQAColorTable        *colorTable);        /* Previously allocated by QAColorTableNew() */
  1001.     
  1002. RAVE_EXPORT TQAError QABitmapNew (
  1003.     const TQAEngine        *engine,            /* Drawing engine to use */
  1004.     unsigned long        flags,                /* Mask of kQABitmap_xxx flags */
  1005.     TQAImagePixelType    pixelType,            /* Depth, color space, etc. */
  1006.     const TQAImage        *image,                /* Image */
  1007.     TQABitmap            **newBitmap);        /* (Out) Newly created TQABitmap, or NULL on error */ 
  1008.  
  1009. RAVE_EXPORT TQAError QABitmapDetach (
  1010.     const TQAEngine        *engine,            /* Drawing engine to use */
  1011.     TQABitmap            *bitmap);            /* Previously allocated by QABitmapNew() */
  1012.  
  1013. RAVE_EXPORT void QABitmapDelete (
  1014.     const TQAEngine        *engine,            /* Drawing engine to use */
  1015.     TQABitmap            *bitmap);            /* Previously allocated by QABitmapNew() */
  1016.  
  1017. RAVE_EXPORT TQAError QABitmapBindColorTable(
  1018.     const TQAEngine        *engine,            /* Drawing engine to use */
  1019.     TQABitmap            *bitmap,            /* Previously allocated by QABitmapNew() */
  1020.     TQAColorTable        *colorTable);        /* Previously allocated by QAColorTableNew() */
  1021.     
  1022. RAVE_EXPORT TQAEngine *QADeviceGetFirstEngine (
  1023.     const TQADevice    *device);                /* Target device */
  1024.  
  1025. RAVE_EXPORT TQAEngine *QADeviceGetNextEngine (
  1026.     const TQADevice    *device,                /* Target device */
  1027.     const TQAEngine    *currentEngine);        /* Engine after 'currentEngine' is returned */
  1028.  
  1029. RAVE_EXPORT TQAError QAEngineCheckDevice (
  1030.     const TQAEngine    *engine,                /* Engine to check on 'device' */
  1031.     const TQADevice    *device);                /* Target device */
  1032.  
  1033. RAVE_EXPORT TQAError QAEngineGestalt (
  1034.     const TQAEngine        *engine,            /* Engine being queried */
  1035.     TQAGestaltSelector    selector,            /* Gestalt parameter being requested */
  1036.     void                *response);            /* Buffer that receives response */
  1037.  
  1038. RAVE_EXPORT TQAError QAEngineEnable (
  1039.     long            vendorID,                /* Vendor ID of engine to enable */
  1040.     long            engineID);                /* Engine ID of engine to enable */
  1041.  
  1042. RAVE_EXPORT TQAError QAEngineDisable (
  1043.     long            vendorID,                /* Vendor ID of engine to disable */
  1044.     long            engineID);                /* Engine ID of engine to disable */
  1045.  
  1046. #ifdef __cplusplus
  1047. }
  1048. #endif
  1049.  
  1050. #endif /* _RAVE_h */
  1051.